public class Solution {
    public static void main(String[] args) {
        int[][] costs = {{17,2,17},{16,16,5},{14,3,19}};
        System.out.println(minCost(costs));
    }
    //粉刷房子
    public static int minCost(int[][] costs) {
        int n = costs.length;
        int[][] dp = new int[n+1][3];
        dp[0][0] = 0;
        dp[1][0] = 0;
        dp[2][0] = 0;
        for (int i = 1; i <= n; i++) {
            //i位置是红色最小花费
            dp[i][0] = Math.min(dp[i-1][1],dp[i-1][2]) + costs[i-1][0];
            //i位置是蓝色最小花费
            dp[i][1] = Math.min(dp[i-1][0],dp[i-1][2]) + costs[i-1][1];
            //i位置是绿色最小花费
            dp[i][2] = Math.min(dp[i-1][0],dp[i-1][1]) + costs[i-1][2];
        }
        //返回最后一个位置最小花费
        return Math.min(dp[n][0],Math.min(dp[n][1],dp[n][2]));
    }
}
